remove duplicate code to allocate a string ala printf (using kasprintf)
authorvhanquez@kneesa.uk.xensource.com <vhanquez@kneesa.uk.xensource.com>
Wed, 21 Dec 2005 11:14:37 +0000 (11:14 +0000)
committervhanquez@kneesa.uk.xensource.com <vhanquez@kneesa.uk.xensource.com>
Wed, 21 Dec 2005 11:14:37 +0000 (11:14 +0000)
Signed-off-by: Vincent Hanquez <vincent@xensource.com>
linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_client.c
linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c
linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_xs.c

index b28cc76c48a5c2c3e9a019e1947745b52b9f4f1c..048d33cb091e1cf7d3a509914aa8fb829007a526 100644 (file)
@@ -63,6 +63,7 @@ int xenbus_watch_path(struct xenbus_device *dev, const char *path,
 }
 EXPORT_SYMBOL(xenbus_watch_path);
 
+extern char *kasprintf(const char *fmt, ...);
 
 int xenbus_watch_path2(struct xenbus_device *dev, const char *path,
                       const char *path2, struct xenbus_watch *watch, 
@@ -70,16 +71,11 @@ int xenbus_watch_path2(struct xenbus_device *dev, const char *path,
                                        const char **, unsigned int))
 {
        int err;
-       char *state =
-               kmalloc(strlen(path) + 1 + strlen(path2) + 1, GFP_KERNEL);
+       char *state = kasprintf("%s/%s", path, path2);
        if (!state) {
                xenbus_dev_fatal(dev, -ENOMEM, "allocating path for watch");
                return -ENOMEM;
        }
-       strcpy(state, path);
-       strcat(state, "/");
-       strcat(state, path2);
-
        err = xenbus_watch_path(dev, state, watch, callback);
 
        if (err) {
@@ -126,16 +122,7 @@ EXPORT_SYMBOL(xenbus_switch_state);
  */
 static char *error_path(struct xenbus_device *dev)
 {
-       char *path_buffer = kmalloc(strlen("error/") + strlen(dev->nodename) +
-                                   1, GFP_KERNEL);
-       if (path_buffer == NULL) {
-               return NULL;
-       }
-
-       strcpy(path_buffer, "error/");
-       strcpy(path_buffer + strlen("error/"), dev->nodename);
-
-       return path_buffer;
+       return kasprintf("error/%s", dev->nodename);
 }
 
 
index 72e81712d81d61d2b91901508b72462de3e36486..09001a5463f6ff395e76d6795efa5943ee2b0f53 100644 (file)
@@ -505,7 +505,7 @@ static void xenbus_dev_release(struct device *dev)
 }
 
 /* Simplified asprintf. */
-static char *kasprintf(const char *fmt, ...)
+char *kasprintf(const char *fmt, ...)
 {
        va_list ap;
        unsigned int len;
index cb4f33d35aeabd8f06399c582ebeca39f097154b..acc677da6b225baed02ff4a2dd18b0a7922db512 100644 (file)
@@ -276,18 +276,11 @@ static char *join(const char *dir, const char *name)
 {
        char *buffer;
 
-       buffer = kmalloc(strlen(dir) + strlen("/") + strlen(name) + 1,
-                        GFP_KERNEL);
-       if (buffer == NULL)
-               return ERR_PTR(-ENOMEM);
-
-       strcpy(buffer, dir);
-       if (!streq(name, "")) {
-               strcat(buffer, "/");
-               strcat(buffer, name);
-       }
-
-       return buffer;
+       if (strlen(name) == 0)
+               buffer = kasprintf("%s", dir);
+       else
+               buffer = kasprintf("%s/%s", dir, name);
+       return (!buffer) ? ERR_PTR(-ENOMEM) : buffer;
 }
 
 static char **split(char *strings, unsigned int len, unsigned int *num)